/******************************************************
* 文    件：spi.h
* 版    本：V2.0
* 环    境：IAR for Atmel 6.70.1
* 芯    片：ATmega系列单片机
* 时    间：2016年4月29日
* 参    考：ST公司STM32固件库及网上资源的总结
* 公    司：彪彪电子(www.aabiao.top)
* 作    者：付瑞彪(Tom Free)
*******************************************************/

#ifndef SPI_H_
#define SPI_H_

#include "typedef.h"

//定义数据传输方向常量
typedef enum
{
	SPI_MSB		=0,
	SPI_LSB		=1
}SPI_ML_SET;

//定义主从选择常量
typedef enum
{
	SPI_SLAVE	=0,
	SPI_MASTER	=1
}SPI_MS_SET;

//定义模式选择常量
typedef enum
{
	SPI_MODE0	=0,
	SPI_MODE1	=1,
	SPI_MODE2	=2,
	SPI_MODE3	=3
}SPI_MODE_SET;

//定义分频因子常量
typedef enum
{
	SPI_DIV4	=0,
	SPI_DIV16	=1,
	SPI_DIV64	=2,
	SPI_DIV128	=3,
	SPI_DIV2	=4,
	SPI_DIV8	=5,
	SPI_DIV32	=6,
	SPI_DIV64_1	=7
}SPI_DIV_SET;


/* 用户可以在以下定义中加入你所使用的单片机型号 */
#if (CHIP_TYPE == 8)
 	#define MOSI	PB,3
	#define MISO	PB,4
	#define SCK		PB,5
	#define SS		PB,2
#elif (CHIP_TYPE == 48)
 	#define MOSI	PB,3
	#define MISO	PB,4
	#define SCK		PB,5
	#define SS		PB,2
#elif (CHIP_TYPE == 88)
 	#define MOSI	PB,3
	#define MISO	PB,4
	#define SCK		PB,5
	#define SS		PB,2
#elif (CHIP_TYPE == 168)
 	#define MOSI	PB,3
	#define MISO	PB,4
	#define SCK		PB,5
	#define SS		PB,2
#elif (CHIP_TYPE == 328)
 	#define MOSI	PB,3
	#define MISO	PB,4
	#define SCK		PB,5
	#define SS		PB,2
#elif (CHIP_TYPE == 16)
 	#define MOSI	PB,5
	#define MISO	PB,6
	#define SCK		PB,7
	#define SS		PB,4
#elif (CHIP_TYPE == 32)
 	#define MOSI	PB,5
	#define MISO	PB,6
	#define SCK		PB,7
	#define SS		PB,4
#elif (CHIP_TYPE == 64)
 	#define MOSI	PB,2
	#define MISO	PB,3
	#define SCK		PB,1
	#define SS		PB,0
#elif (CHIP_TYPE == 128)
 	#define MOSI	PB,2
	#define MISO	PB,3
	#define SCK		PB,1
	#define SS		PB,0
//Add your MCU type here!
//#elif (CHIP_TYPE == xxx)
// 	#define MOSI
//	#define MISO
//	#define SCK
//	#define SS
#endif

//spi常用寄存器位定义
#define SPIF 7

void SPI_Init(SPI_ML_SET,SPI_MS_SET,SPI_MODE_SET,SPI_DIV_SET);
void SPI_SpeedSet(SPI_DIV_SET divset);
void SPI_WriteByte(char c);
char SPI_ReadByte();

/*******************************************************************************
** 函数名称：SPI_RWByte
** 函数作用：读写数据
** 输入参数：data - 待写入的数据
** 输出参数：读出的数据
** 使用范例：GM_U8 res = SPI_RWByte(data);
** 函数备注：
*******************************************************************************/
GM_U8 SPI_RWByte(GM_U8 data);

#endif